package br.com.medvagas.web.conversor;

import java.math.BigDecimal;

import javax.faces.application.FacesMessage;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.convert.ConverterException;
import javax.faces.convert.FacesConverter;

import org.apache.commons.lang.StringUtils;

import br.com.medvagas.comum.funcoes.FuncoesValor;
import br.com.medvagas.comum.util.JSFMensagem;
import br.com.medvagas.comum.util.UtilJSF;

@FacesConverter("conversorHora")
public class ConversorHora implements Converter {
	
	@Override
	public String getAsString(FacesContext facesContext, UIComponent uiComponent, Object valor) 
			throws ConverterException {
		
		if (valor != null) {
			if (valor instanceof String) {
				String valorString = (String) valor;
				if (!valorString.contains(":")) {
					String valorFormatado = valorString.substring(0,2) + ":" + valorString.substring(2);
					return valorFormatado;
				}
			} else if (valor instanceof Integer) {
				String valorString = valor.toString();
				String valorFormatado = null;
				if (valorString.length() < 4) {
					valorFormatado = "0" + valorString.substring(0,1) + ":" + valorString.substring(2);
				} else {
					valorFormatado = valorString.substring(0,2) + ":" + valorString.substring(2);
				}
				return valorFormatado;
			}
		}
		
		return "";
	}

	@Override
	public Object getAsObject(FacesContext facesContext, UIComponent uiComponent, String novoValor) 
			throws ConverterException {

		BigDecimal bigDecimal = null; 
		
		if (StringUtils.isNotEmpty(novoValor)) {
			
			try {
				
				bigDecimal = FuncoesValor.formatoMoedaToBigDecimal(novoValor);
				
			} catch (Exception e) {
				FacesMessage facesMessage = new FacesMessage(
						FacesMessage.SEVERITY_ERROR, 
						JSFMensagem.getMensagemAplicacaoFormatada("MSG_0018", 
								UtilJSF.getLabelComponente(uiComponent.getClientId(facesContext))),
						null);	
				throw new ConverterException(facesMessage);
			}
		}
		return bigDecimal;
	}

}
